package com.alimentamais.app.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.alimentamais.app.dominio.*;

public class IngredienteReceitaDao implements IIngredienteReceitaDao{
	
	 private static final String SQL_INSERT=
		"INSERT INTO ingredienteReceita( receita_IdReceita, ingrediente_IdIngrediente)values(?,?)";
			
	 private static final String SQL_REMOVE=
		"DELETE FROM ingredienteReceita WHERE receita_IdReceita=? AND ingrediente_IdIngrediente=?";
	
	 private static final String SQL_PESQUISA=
		"SELECT * FROM ingredienteReceita";
	

	@Override
	public int incluir(IngredienteReceita ingredienteReceita) {
		
		Boolean localizado=false; 
		Connection con= DBConexao.getConnection();
	    PreparedStatement stm = null;
	     
		try {
			 stm = con.prepareStatement(SQL_PESQUISA);
			 ResultSet rs;
			 rs = stm.executeQuery();
			 while(rs.next()){
		        
				if(rs.getInt("receita_IdReceita")==ingredienteReceita.getIdReceita()){ 
        		  if(rs.getInt("ingrediente_IdIngrediente")==ingredienteReceita.getIdIngrediente()){
        		
        				localizado=true;
        				break;
        		  }
        		}
			 }
			if(localizado==false){
        			
        			 int result=0;
        			 PreparedStatement stm1 = null;
        	         try{
        	             stm1 = con.prepareStatement(SQL_INSERT);
        	             stm1.setInt(1, ingredienteReceita.getIdReceita());
        	             stm1.setInt(2, ingredienteReceita.getIdIngrediente());
        	           
        	             result=stm1.executeUpdate();
        	             
        	         }catch(SQLException e){
        	        	 try{
        	        		 if(con!=null){
        	        			
        	        			 con.rollback();
        	        		 }
        	        	 }catch(SQLException e1){
        	        		 
        	        		 e1.printStackTrace();
        	        	 }finally{
        	        		 DBConexao.close(con, stm, null);
        	        	 }
        	        	 e.printStackTrace();
        	         }
        	         return result;    
			}		
			
		} catch (SQLException e2) {
			
			e2.printStackTrace();
		}finally{
   		    DBConexao.close(con, stm, null);
   	    }
		
		return 0;
	}

	@Override
	public int excluir(int IdReceita, int IdIngredienteReceita) {
		
		Connection con= DBConexao.getConnection();
        PreparedStatement stm=null;
        int result=0;
            
        try{
            stm = con.prepareStatement(SQL_REMOVE);
            stm.setInt(1, IdReceita);
            stm.setInt(2, IdIngredienteReceita);
            
            result=stm.executeUpdate();
            
        }catch(SQLException e){
       	 try{
       		 if(con!=null){
       			 con.rollback();
       		 }
       	 }catch(SQLException e1){
       		 
       		 e1.printStackTrace();
       	 }finally{
       		 DBConexao.close(con, stm, null);
       	 }
       	 e.printStackTrace();
        }
		
		return result;
	}

	@Override
	public List<IngredienteReceita> pesquisarTodas(int codigo) {
		
		 Connection con= DBConexao.getConnection();
         PreparedStatement stm=null;
         ResultSet rs=null;
         List<IngredienteReceita>receitas=new ArrayList<IngredienteReceita>();
         
         try{
             stm = con.prepareStatement("SELECT * FROM ingredienteReceita WHERE  receita_IdReceita ="+codigo);
             rs=stm.executeQuery();
             
             while(rs.next()){

                IngredienteReceita receita=new IngredienteReceita();
                
 				receita.setIdIngrediente(rs.getInt("ingrediente_IdIngrediente"));
 			
 				receitas.add(receita);
 				
             }
             
         }catch(SQLException e){
        	 try{
        		 if(con!=null){
        			 con.rollback();
        		 }
        	 }catch(SQLException e1){
        		 
        		 e1.printStackTrace();
        	 }finally{
        		 DBConexao.close(con, stm, rs);
        	 }
        	 e.printStackTrace();
         }
		
		return receitas;

	}

}
